L'hardware dell'Amiga Il cuore del sistema come ben sapete è il 680x0 della Motorola; scelta decisamente giusta in quanto questo microprocessore possiede una serie di caratteristiche (trap, modo supervisore e utente ecc.) che lo rendono particolarmente efficace per il multitasking; ed è ben conosciuta la caratteristica unica dell'Amiga: i coprocessori; infatti il microprocessore è attorniato da una serie di coprocessori, ognuno dedicato ad un operazione ben specifica, che sollevano quest'ultimo dal compito di occuparsi di determinati problemi (spesso di ingresso/uscita) per dedicarsi completamente a quelli di calcolo. Come avrete sentito più volte questi processori hanno dei nomi piuttosto pittoreschi: Denise (sostituito nelle macchine AGA da Lisa), Fat Agnus (attualmente Alice), Paula, CIA (e adesso sul CD32 se ne aggiunto uno nuovo: Akiko); trascurando il perché di questi nomi tutti femminili (io veramente mi preoccuperei se venisse prodotto un integrato con un nome del tipo: Ugo!) andiamo ad analizzarne le caratteristiche. Lisa è il processore grafico, cioè colui che crea tutte le risoluzioni, determina tutte le frequenze video, insomma visualizza tutto sullo schermo; Alice forse è il più importante di tutti ed è composto da più processori messi insieme utilizzando una definizione in VLSI (Very Large Scale Integration = Integrazione a Scala Molto Grande) per compattezza e per minimizzare i costi; contiene innanzitutto il Blitter il cui nome proviene da BLIT (BLock Image Transfer = Trasferimento di Immagine a Blocchi); scopo di questo integrato è spostare blocchi di memoria rettangolari (che nella stragrande maggioranza si tratta di blocchi grafici) con operazioni logiche e ad una velocità impressionante; permette anche di tracciare linee ed eseguire il filling (riempimento) grafico; potete ben immaginare che essendo tutto ciò realizzato via hardware risulta velocissimo; in realtà grazie alla funzione logica programmabile che opera sui dati in tempo reale, se ne fà degli utilizzi più svariati e non solo per la grafica (decodifica MFM, cancellazione di memoria ecc.). Altro integrato contenuto in Alice è il Copper; questo è un velocissimo processore RISC (Reduce Instructions Set Chip = Chip con set di istruzioni ridotto) che permette solo 3 istruzioni e risulta sincronizzato al pennello video! Vale a dire che il programma del Copper può attendere una precisa posizione di quest'ultimo (e non solo in verticale) per eseguire determinate operazioni; dovete a lui la possibilità di slittare gli schermi uno sopra l'altro, infatti quando si raggiunge una determinata posizione verticale dello schermo il copper cambia i registri di Lisa inserendo i parametri del secondo schermo, e tornando all'inizio del video ripristina quelli vecchi. Fa parte di Alice anche la circuteria per la gestione e temporizzazione dei canali DMA che vedremo dopo; arriva quindi Paula il processore che si occupa sostanzialmente della generazione sonora dalle caratteristiche note a tutti. Infine ci sono due CIA (Complex Interface Adapter = Adattatore complesso di interfaccia) siglati numericamente come 8520 e che erano presenti anche nel C64! Si tratta degli integrati che regolano il flusso dei dati con l'esterno; infatti tramite loro si gestiscono drive, porta seriale e parallela, tastiera e le porte joystick. Ma non è finito qui, poiché occorre indicare dove i dati a cui questi integrati fanno riferimento vengono memorizzati (cioè dove si trovano i bitplanes contenenti i dati dello schermo per Lisa, o i suoni per Paula); e qui è presente un'altra caratteristica unica dell'Amiga, infatti tutti i dati sono conservati nella stessa memoria, accedibile anche dal microprocessore centrale; questo è sicuramente positivo, infatti su altre piattaforme se viene resa disponibile un determinato quantitativo di memoria su una scheda, ad esempio grafica, e se ne viene utilizzata solo una parte, il resto non può essere disponibile ad altre risorse del sistema; ma come è possibile che tutti gli integrati accedano contemporaneamente alla stessa memoria? Tutto ciò è in parte merito dei canali DMA (Direct Memory Access = Accesso Diretto della Memoria) che permettono a ciascun processore di prelevare i dati dalla RAM senza l'ausilio della CPU; ma ciò non esaurisce il problema, perché come tutti i "vecchi" (che non erano vecchi prima dell'avvento di Amiga) libri di informatica descrivono, quando il canale DMA accede alla memoria centrale, lascia il microprocessore libero dall'oneroso compito di trasferire i dati e dedicarsi al programma, senza però concederne l'accesso alla memoria; bene il grandioso cast di ingegneri di Amiga ha ben pensato di partizionare il tempo dedicato ad ogni canale DMA (sono 28 in tutto) e il microprocessore; mentre fra i canali DMA questo non comporta quasi nessuna limitazione (tranne per quelli del Blitter e del Copper) perché si conoscono a priori le esigenze di tempo di ciascuno, lo stesso non si può dire per il microprocessore che in un buon numero di casi è costretto ad aspettare il prossimo slot time (così si chiama il periodo di tempo concesso ad ogni canale) se quello attuale è occupato da un DMA; l'idea come era congeniata per i primi modelli funzionava bene: infatti il 68000 impiegava uno slot di tempo per eseguire il "fetch" dell'istruzione (cioè prelevamento dell'istruzione e degli operandi dalla memoria) e per l'accesso alla memoria e quello successivo per la fase di "execute" dell'istruzione in cui non vi erano quasi mai accessi alla memoria; per cui si è cercato di inserire tutti i possibili accessi dei DMA negli slot pari (in cui il microprocessore era nella fase di execute) e lasciare liberi quelli dispari per il microprocessore; però anche nel sistema iniziale il microprocessore attendeva poiché in caso di utilizzo di risoluzioni elevate gli slot concessi ai DMA del Denise sconfinavano in quelli dispari; la maggior parte degli altri canali DMA (sprite, disco, audio) erano posizionati in maniera fissa e se non venivano utilizzati (perché in quel momento non si legge dal disco ad esempio) potevano essere usati dagli altri che risultano dinamici, cioè che possono utilizzare qualunque slot libero quando necessario; questi sono il microprocessore, il Blitter ed il Copper; ma con quale criterio viene scelto quello piuttosto di quell'altro per l'assegnazione? Bene, per questo sono previsti dei registri di priorità; ad esempio il Blitter ha normalmente priorità più alta del microprocessore per cui se il Blitter in un dato momento opera, al microprocessore vengono assegnati un numero minimo di slot time. La memoria che viene condivisa in questo modo, viene denominata CHIP e quindi risulta più lenta da sfruttare (vista dal microprocessore); ma può essere addizionata al sistema altra memoria che viene utilizzata solo dal microprocessore centrale e che quindi può essere sfruttata a pieno da quest'ultimo; questa viene denominata FAST (il 68020 di un A1200 con FAST memory gira circa il doppio più veloce rispetto ad uno senza). Fanno eccezione a quanto detto fino adesso, i due CIA con cui il microprocessore deve interagire direttamente; per cui sia parallela, che seriale, tastiera e porte joystick non dispongono di canali DMA (mentre il disk drive si) e devono essere gestiti dal microprocessore mediante interrupt.